<?php
	require I_PATH . 'xml.php';
	
	if (!isAdminConnected()) die('vous n\'êtes pas autorisé à voir cette page!');
	
	/*
		texte des bouton d'ajouts (utiliser plusieurs fois!)
		note: tout autre 'action' sera prit comme étant la validation du formulaire.
	*/
	$ACTION_ACTOR = 'Ajouter un acteur';
	$ACTION_MOVIE = 'Ajouter un film';
	$ACTION_SOUND = 'Ajouter une piste audio';
	
	$nbtrack = array();
	
/*************************
	lecture de la base XML
*************************/
	if (!isset($_POST['edit']) && isset($_GET['id_dvd'])) {
		$dvd = $dvd_dom->getElementById($_GET['id_dvd']) or die('dvd inexistant: '.$_GET['id_dvd']);
		
		$_POST['title'] = $dvd->getElementsByTagName('title')->item(0)->nodeValue;
		$_POST['dvdcount'] = $dvd->getElementsByTagName('dvdcount')->item(0)->nodeValue;
		$_POST['price'] = $dvd->getElementsByTagName('price')->item(0)->nodeValue;
		if ($e = $dvd->getElementsByTagName('date')->item(0)) {
			$s = explode('/', $e->nodeValue);
			$_POST['date'] = $s[2].'/'.$s[1].'/'.$s[0];
		}
		if ($e = $dvd->getElementsByTagName('summary')->item(0))
			$_POST['summary'] = $e->nodeValue;
		
		foreach ($dvd->getElementsByTagName('type') as $e)
			if (isset($_POST['type']))
				$_POST['type'] .= ',' . $e->nodeValue;
			else
				$_POST['type'] = $e->nodeValue;
		
		if ($e = $dvd->getElementsByTagName('editor')->item(0))
			$_POST['editor'] = $e->nodeValue;
		if ($e = $dvd->getElementsByTagName('director')->item(0))
			$_POST['director'] = $e->nodeValue;
		
		$nbactor = 0;
		foreach ($dvd->getElementsByTagName('actor') as $e) {
			$_POST['name'.$nbactor] = $e->getElementsByTagName('name')->item(0)->nodeValue;
			$_POST['role'.$nbactor] = $e->getElementsByTagName('role')->item(0)->nodeValue;
			$nbactor++;
		}
		
		$nbmovie = 0;
		foreach ($dvd->getElementsByTagName('movie') as $e) {
		
			if ($ee = $e->getElementsByTagName('title')->item(0))
				$_POST['title'.$nbmovie] = $ee->nodeValue;
			$_POST['runtime'.$nbmovie] = $e->getElementsByTagName('runtime')->item(0)->nodeValue;
			foreach ($e->getElementsByTagName('videotrack') as $ee)
				if (isset($_POST['videotrack'.$nbmovie]))
					$_POST['videotrack'.$nbmovie] .= ','.$ee->nodeValue;
				else
					$_POST['videotrack'.$nbmovie] = $ee->nodeValue;
			
			$i = 0;
			foreach ($e->getElementsByTagName('soundtrack') as $ee) {
				$id = 'soundtrack'.$nbmovie.'_';
				
				foreach ($ee->getElementsByTagName('type') as $eee)
					if (isset($_POST[$id.'type'.$i]))
						$_POST[$id.'type'.$i] .= ','.$eee->nodeValue;
					else
						$_POST[$id.'type'.$i] = $eee->nodeValue;
				$_POST[$id.'lang'.$i] = $e->getElementsByTagName('lang')->item(0)->nodeValue;
				
				$i++;
			}
			$nbtrack[$nbmovie] = $i;
					
			$nbmovie++;
		}
		
		
	} else {
		/*
			récupération/définition du nombre d'acteur, films et pistes sons
		*/
		if (isset($_POST['nbactor']))
			$nbactor = $_POST['nbactor'];
		else
			$nbactor = 1;
		
		if (isset($_POST['nbmovie']))
			$nbmovie = $_POST['nbmovie'];
		else
			$nbmovie = 1;

		for ($i = 0; $i < $nbmovie; $i++) {
			if (isset($_POST['nbtrack'.$i])) // gestion des actions d'ajout de pistes sons.
				$nbtrack[$i] = $_POST['nbtrack'.$i];
			else
				$nbtrack[$i] = 1;
			if (isset($_POST['action' . $i]))
				$nbtrack[$i]++;
		}
	}
	
/**************
	traitements
**************/
	
	/*
		gestion des actions
	*/
	$edit = true; // si vrais, afficheras le formulaire d'édition.
	$err = array(); // tableau contenant les messages d'erreurs de chaque champs.
	if (!isset($_POST['action']))
		$_SESSION['action_perfomed'] = false;
	else {
		switch ($_POST['action']) {
		case $ACTION_ACTOR: $nbactor++; break; // ajout d'un film
		case $ACTION_MOVIE: $nbtrack[$nbmovie] = 1; $nbmovie++; break; // ajout d'un film
		
		// action d'ajout de dvd:
		default:
			
			$edit = false;
			
			if (isset($_SESSION['action_perfomed']) && $_SESSION['action_perfomed']) {
				echo '<p class="warning">Le DVD est déja enregistré!</p>';
			} else {
				$_SESSION['action_perfomed'] = true;
				
/***************************
	vérification des valeurs
***************************/
				function errfield($id, $message) {
					global $edit, $err;
				
					$err[$id] = $message;
					$edit = true;
				}
				function testfield($id, $message) {
					$b = isset($_POST[$id]);
				
					if (!$b || trim($_POST[$id]) == '') {
						errfield($id, $message);
						return false;
					}
					return $b;
				}
			
			
				testfield('title', 'Le DVD doit avoir un titre (peu être le titre du film!)');
				if (testfield('dvdcount', 'Vous devez spécifier le nombre de DVD disponible!)') && (!ctype_digit($_POST['dvdcount']) || $_POST['dvdcount']<=0))
					errfield('dvdcount', 'Le nombre de dvd doit être un nombre entier suppérieur à 0');
				if (testfield('price', 'Le DVD doit avoir un prix de location') && !is_numeric($_POST['price']))
					errfield('price', 'Le prix doit être un chiffre');
				if (isset($_POST['date']) && trim($_POST['date']) != '') {
					$a = explode('/', $_POST['date']);
					if (sizeof($a) != 3 || !ctype_digit($a[0]) || !ctype_digit($a[1]) || !ctype_digit($a[2]) || !checkdate($a[1], $a[0], $a[2]))
						errfield('date', 'La date doit être au format <i>jour</i>/<i>mois</i>/<i>année</i>');
				}
			
				$b2=true; // vrais si aucun film n'a été renségné (il en faut au moins 1)
				for ($i = $nbmovie-1; $i >= 0; $i--) {
					$b = false; // vrais si une piste son est remplis ne serai-ce que partiellement
					for ($j = 0; $j < $nbtrack[$i]; $j++) {
						$t1 = isset($_POST['soundtrack'.$i.'_type'.$j]) && trim($_POST['soundtrack'.$i.'_type'.$j]) != '';
						$t2 = isset($_POST['soundtrack'.$i.'_lang'.$j]) && trim($_POST['soundtrack'.$i.'_lang'.$j]) != '';
						if ($t1 || $t2) {
							if (!$t1) errfield('soundtrack'.$i.'_type'.$j, 'Au moins un type doit être renseigné');
							if (!$t2) errfield('soundtrack'.$i.'_lang'.$j, 'Vous devez indiquer la langue de la piste son');
							$b = true;
						}
					}
					$t1 = isset($_POST['runtime'.$i]) && trim($_POST['runtime'.$i]) != '';
					$t2 = isset($_POST['videotrack'.$i]) && trim($_POST['videotrack'.$i]) != '';
					$t3 = isset($_POST['title'.$i]) && trim($_POST['title'.$i]) != '';
					$t4 = isset($_POST['subtitle'.$i]) && trim($_POST['subtitle'.$i]) != '';
					if ($b || ($i == 0 && $b2) || $t1 || $t2 || $t3 || $t4) {
						if (!$t1)
							errfield('runtime'.$i, 'Un film doit avoir une durée');
						elseif (!ctype_digit($_POST['runtime'.$i]) || $_POST['runtime'.$i]<=0)
							errfield('runtime'.$i, 'La durée du film doit être un entier supérieur à zéro');
						if (!$t2) errfield('videotrack'.$i, 'Un film doit avoir au moins une piste vidéo');
						if (!$b) {
							testfield('soundtrack'.$i.'_type0', 'Au moin un type doit être renseigné');
							testfield('soundtrack'.$i.'_lang0', 'Vous devez indiquer la langue de la piste son');
						}
						$b2 = false;
					}
				}
			
				for ($i = 0; $i < $nbactor; $i++)
					if (
						(isset($_POST['name'.$i]) && (trim($_POST['name'.$i]) != '')) ||
						(isset($_POST['role'.$i]) && trim($_POST['role'.$i]) != '') ) {
						testfield('name'.$i, 'L\'acteur doit avoir un nom');
						testfield('role'.$i, 'Le rôle de l\'acteur doit être renseigné');
					}
			
	//			foreach ($err as $k => $v)
	//				echo $k.'='.$v.'<br/>';
			
/***********************************************************
	création et sauvegarde de la nouvelle base de donnée XML
***********************************************************/
				if ($edit) 
					$_SESSION['action_perfomed'] = false; // 'bloque' F5
				else {
					$a = $dvd_dom->createAttribute('id');
					$dvds = $dvd_dom->getElementsByTagName('dvds')->item(0);
					
					if (isset($_GET['id_dvd'])) {
						$id = $_GET['id_dvd'];
						$dvds->removeChild($dvd_dom->getElementById($id));
					} else {
						$title = strtolower(trim($_POST['title']));
						$id = '';
						foreach (str_split($title) as $i)
							if ($i < 'z' && $i > 'a')
								$id .= $i;
						for ($i = 0; $dvd_dom->getElementById($id.$i); $i++);
						$id .= $i;
					}
					$e = $dvd_dom->createElement('dvd');
					$dvds->appendChild($e);
					
					//Sauvegarde de l'id dans la base de donnée
					$bd = openBD();
					$stmt = $bd->prepare("INSERT INTO DVD VALUES (:id)");
					$stmt->bindParam(':id', $id);
					$stmt->setFetchMode(PDO::FETCH_OBJ);
					$stmt->execute();
					
					$a->value = $id;
					$e->appendChild($a);
			
					$e->appendChild($dvd_dom->createElement('title', trim($_POST['title'])));
					$e->appendChild($dvd_dom->createElement('dvdcount', trim($_POST['dvdcount'])));
					$e->appendChild($dvd_dom->createElement('price', trim($_POST['price'])));
					if ($_POST['date']) $e->appendChild($dvd_dom->createElement('date', trim($_POST['date'])));
					if ($_POST['summary']) $e->appendChild($dvd_dom->createElement('summary', trim($_POST['summary'])));
			
					foreach (explode(',', $_POST['type']) as $t)
						if (trim($t))
							$e->appendChild($dvd_dom->createElement('type', trim($t)));
			
					for ($i = 0; $i < $nbmovie; $i++)
						if ($_POST['runtime'.$i]) {
							$se = $dvd_dom->createElement('movie');
							if ($_POST['title'.$i]) $se->appendChild($dvd_dom->createElement('title', trim($_POST['title'.$i])));
							$se->appendChild($dvd_dom->createElement('runtime', trim($_POST['runtime'.$i])));
					
							foreach (explode(',', $_POST['videotrack'.$i]) as $t)
								if (trim($t))
									$se->appendChild($dvd_dom->createElement('videotrack', trim($t)));
					
							for ($j = 0; $j < $nbtrack[$i]; $j++) {
								$sse = $dvd_dom->createElement('soundtrack');
								foreach (explode(',', $_POST['soundtrack'.$i.'_type'.$j]) as $t)
									if (trim($t))
										$sse->appendChild($dvd_dom->createElement('type', trim($t)));
								$sse->appendChild($dvd_dom->createElement('lang', trim($_POST['soundtrack'.$i.'_lang'.$j])));
								$se->appendChild($sse);
							}
					
							foreach (explode(',', $_POST['subtitle'.$i]) as $t)
								if (trim($t)) {
									$sse = $dvd_dom->createElement('subtitle');
									$sse->appendChild($dvd_dom->createElement('lang', trim($t)));
									$se->appendChild($sse);
								}
						
							$e->appendChild($se);
						}
			
					if ($_POST['editor']) $e->appendChild($dvd_dom->createElement('editor', trim($_POST['editor'])));
					if ($_POST['director']) $e->appendChild($dvd_dom->createElement('director', trim($_POST['director'])));
			
					for ($i = 0; $i < $nbactor; $i++)
						if (trim($_POST['name'.$i])) {
							$se = $dvd_dom->createElement('actor');
							$se->appendChild($dvd_dom->createElement('name', trim($_POST['name'.$i])));
							$se->appendChild($dvd_dom->createElement('role', trim($_POST['role'.$i])));
							$e->appendChild($se);
						}
			
	//				checkDTD($dvd_dom);
	//				echo '<textarea cols="75" rows="100">' . $dvd_dom->saveHTML() . '</textarea>';
					
					saveDVDs();
				
					echo 'DVD correctement enregistré sous l\'identifiant '.$id;
				}
			}
		}
	}
	
	
/***********************
	formulaire d'édition
***********************/
	if ($edit) {
		
		function input($class, $id, $desc, $param = '', $type='input') {
			global $err;
			
			if (isset($err[$id])) echo '<div class="error"><div>'.$err[$id].'</div>';
			echo '<'.$type.' ';
			if ($param) echo $param.' ';
			if ($class) echo 'class="require" ';
			echo 'name="' . $id . '" title="' . $desc;
			
			if ($type=='textarea') {
				echo '">';
				if (isset($_POST[$id]))
						echo trim($_POST[$id]);
				echo '</textarea>';
			} else {
				if (isset($_POST[$id]))
						echo '" value="' . trim($_POST[$id]);
				echo '" />';
			}
			
			if (isset($err[$id])) echo '</div>';
		}
		function field($name, $class, $id, $desc, $param = '', $type='input') {
			echo '<tr><td><label>' . $name . ' : </label></td><td>';
			input($class, $id, $desc,$param,$type);
			echo '</td></tr>';
		}
		
		echo '<h1>';
		if (isset($_GET['id_dvd']))
			echo 'Modification du DVD \''.$_GET['id_dvd'].'\'';
		else
			echo 'Ajout d\'un DVD';
		echo '</h1>';
?>

<script>
	$(function() {
		$( "input[name='date']" ).datepicker({ dateFormat: "dd/mm/yy" });
	});
</script>
<form METHOD="POST" ACTION="#content">
	<input type="submit" name="action" value="Enregistrer le DVD" style="visibility: hidden"/> <!-- l'action par defaut est la première, ce boutton cacher résoud ce problème -->
	<input type="hidden" name="edit" value="true" />
	<input type="hidden" name="nbactor" value="<?php echo $nbactor?>" />
	<input type="hidden" name="nbmovie" value="<?php echo $nbmovie?>" />
	<table>
		<tr><caption><h2>Informations sur le DVD</h2></caption></tr>
		<?php
			field('Titre',    true, 'title',    'Titre et sous-titre(s) du DVD');
			field('Quantité', true, 'dvdcount', 'Nombre d\'exemplaire(s) du DVD pouvant être loué(s)');
			field('Prix',     true, 'price',    'Prix de la location du DVD');
			field('Date',         false, 'date',     'Date de sortie du DVD', 'type="date"');
			field('Résumé',       false, 'summary',  'Résumé du contenu des films contenu dans ce DVD', '', 'textarea');
			field('Type(s)',      false, 'type',     'Type(s) des films séparé par des virgules (exemple: action,animation,aventure,policier,court-métrage)');
			field('Éditeur',      false, 'editor',   'Éditeur du DVD');
			field('Réalisateur',  false, 'director', 'Réalisateur du DVD');
		?>
	</table>
	<table>
		<caption><h2>Acteurs</h2></caption>
		<tr><th>Nom</th><th>Rôle</th></tr>
		<?php
			for ($i = 0; $i < $nbactor; $i++) {
				echo '<tr><td>';
				input(false, 'name' . $i, 'Nom de l\'un des acteurs présent dans les films du DVD');
				echo '</td><td>';
				input(false, 'role' . $i, 'Le rôle principal de cet acteur');
				echo '</td></tr>';
			}
		?>
		<tr><td colspan="2"><input type="submit" name="action" value="<?php echo $ACTION_ACTOR ?>" /></td></tr>
	</table>
	
	<div>
		<?php for ($i = 0; $i < $nbmovie; $i++) { ?>
		<input type="hidden" name="nbtrack<?php echo $i; ?>" value="<?php echo $nbtrack[$i]; ?>">
		<table>
		<tr><caption><h2>Films du DVD</h2></caption></tr>
			<?php
				field('Titre',              false, 'title'.$i,      'Titre du film si différent du titre du dvd');
				field('Durée',            $i == 0, 'runtime'.$i,    'Durée du film en minutes');
				field('Version(s) vidéo', $i == 0, 'videotrack'.$i, 'Type(s) de vidéo séparé par des virgules (ex: 2D,3D)');
				field('Sous-titres',        false, 'subtitle'.$i,   'Code des langues des sous-titres séparé par des virgules (ex: fr,en)');
				
				for ($j = 0; $j < $nbtrack[$i]; $j++) {
					field('Piste son '.($j+1).' - type(s)', $i == 0 && $j == 0, 'soundtrack'.$i.'_type'.$j, 'type(s) séparé par des virgules (ex: mono,stéréo,dolby) de la piste son n°'.($j+1));
					field('Piste son '.($j+1).' - langue',  $i == 0 && $j == 0, 'soundtrack'.$i.'_lang'.$j, 'langue (ex: fr) de la piste son n°'.($j+1));
				}
			?>
			<tr><td></td><td><input type="submit" name="action<?php echo $i; ?>" value="<?php echo $ACTION_SOUND ?>" /></td></tr>
		</table>
		
		<?php } ?>
		<input type="submit" name="action" value="<?php echo $ACTION_MOVIE ?>" />
	</div>
	
	
	<input type="submit" name="action" value="Enregistrer le dvd" />
</form>
<?php
	}
?>
